'use strict';

// had enabled by egg
// exports.static = true;

// 支持 plugin.{env}.js 这种模式，会根据运行环境加载插件配置。
// 不存在 plugin.default.js


// plugin.js 中的每个配置项支持：
// {Boolean} enable - 是否开启此插件，默认为 true
// {String} package - npm 模块名称，通过 npm 模块形式引入插件
// {String} path - 插件绝对路径，跟 package 配置互斥
// {Array} env - 只有在指定运行环境才能开启，会覆盖插件自身 package.json 中的配置

// 在上层框架内部内置的插件，应用在使用时就不用配置 package 或者 path，只需要指定 enable 与否。

// 对于内置插件，可以用下面的简洁方式开启或关闭
// exports.onerror = false; // onerror 是一个插件的名称；
// 内置插件：
// onerror 统一异常处理
// Session Session 实现
// i18n 多语言
// watcher 文件和文件夹监控
// multipart 文件流式上传
// security 安全
// development 开发环境配置
// logrotator 日志切分
// schedule 定时任务
// static 静态服务器
// jsonp jsonp 支持
// view 模板引擎

// 插件一般会包含自己的默认配置，应用开发者可以在 config.default.js 覆盖对应的配置；


const path = require('path');

// ctx.validate(rule, [body]); 如果不传第二个参数会自动校验 `ctx.request.body`;
// 当校验异常时，会直接抛出一个异常，异常的状态码为 422，errors 字段包含了详细的验证不通过信息。如果想要自己处理检查的异常，可以通过 try catch 来自行捕获。
// exports.validate = {
//   enable: true,
//   package: 'egg-validate',
// };

exports.mysql = {
  enable: true,// 默认值就是 true；当设置为 false 时，this.ctx.isIOSByBlugin 就不存在了；
  package: 'egg-mysql'
};

exports.nunjucks = {
  enable: true,
  package: 'egg-view-nunjucks'
};

// 即使启用， this.ctx.ua 也是不存在的；只是有 this.ctx.isIOSByBlugin；
exports.ua = {
  enable: true,// 默认值就是 true；当设置为 false 时，this.ctx.isIOSByBlugin 就不存在了；
  path: path.join(__dirname, '../lib/plugin/egg-ua')
};
// 所谓插件独立，就是独立为一个单独的 node 模块，也就是在 node_modules 目录下创建一个插件目录；
// 一旦独立出去，就不能使用 path  方式来引入，而是使用 package 的方式；
// 另外，还需要在项目的 package.json 中添加依赖项："egg-ua": "../egg-ua"；
// exports.ua = {
//   enable: true,
//   package: 'egg-ua'
// };
// 这样来看，我还是喜欢上面的方式，不用在 package.json 中声明依赖了。
// 通俗来说，package.json 中的依赖都是使用 npm install 来安装的，但显然我们这个自己写的模块是无法进行这个操作的；
// 而且，因为一般情况下我们使用 git 时是忽略 node_modules 目录的，所以 package 的方式需要我们手动拷贝一份自己的模块到线上；
// 其实放在 lib 目录下更方便使用 git。